package com.xique.door.biz.service;


import com.xique.common.core.web.domain.AjaxResult;
import com.xique.door.bean.domain.AccessDevice;
import com.xique.door.bean.domain.DCard;
import com.xique.door.bean.domain.User;
import com.xique.door.bean.request.commandV1.*;
import com.xique.door.device.hk.bean.response.PermissionGroupResponse;

import java.util.List;

/**
 * @author shd
 * @create 2021/7/7 15:57
 * 下发单个用户信息到设备（单个/多个）
 * 下发多个用户信息到设备（单个/多个）
 * 删除单个用户信息到设备（单个/多个）
 * 删除多个用户信息到设备（单个/多个）
 */
public interface IDeviceCommandNewService {

    /**
     * 下发单个用户信息到设备（单个/多个）
     *
     * @param request
     * @return com.ruoyi.common.core.domain.AjaxResult
     * @author shd
     * @date 2021/7/7 16:00
     */
    AjaxResult userInfoDownload(DeviceCommandUserInfoDownloadRequest request);

    /**
     * 下发单个用户信息（卡片）到设备（单个/多个）
     * @param request
     * @param dCard 下发卡片，用户中的customId要以dCard的为准；
     * @return
     */
    AjaxResult userCardInfoDownload(DeviceCommandUserInfoDownloadRequest request, DCard dCard, String commandType);

    /**
     * 用户信息修改下发：权限组没有变更，用户基础信息有变更（图片，名称，人员类型等），同步到设备
     * @param user
     * @return
     */
    AjaxResult updateUserInfo(User user);

    /**
     * 下发多个用户信息到设备（单个/多个）
     *
     * @param request
     * @return com.ruoyi.common.core.domain.AjaxResult
     * @author shd
     * @date 2021/7/8 9:50
     */
    AjaxResult userInfosDownload(DeviceCommandUserInfoDownloadRequest request);

    /**
     * 下发删除单用户
     * @param request
     * @return
     */
    AjaxResult delUserInfo(DeviceCommandDeleteRequest request);

    AjaxResult delUserInfobatch(DeviceCommandDeleteRequest request);

    /**
     * 权限组删除单个用户信息到设备（单个）
     *
     * @param request
     * @return com.ruoyi.common.core.domain.AjaxResult
     * @author shd
     * @date 2021/7/8 10:22
     */
    AjaxResult permissionUserInfoDel(DeviceCommandUserInfoDelRequest request);

    /**
     * 权限组删除多个用户信息到设备（单个/多个）
     *
     * @param request
     * @return com.ruoyi.common.core.domain.AjaxResult
     * @author shd
     * @date 2021/7/8 11:06
     */
    AjaxResult permissionUserInfosDel(DeviceCommandUserInfoDelRequest request);

    /**
     * 权限组添加设备
     * @author shd
     * @date 2021/7/13 16:25
     * @param request
     * @return com.ruoyi.common.core.domain.AjaxResult
     */
    AjaxResult permissionAddDevices(DeviceCommandAddDevicesRequest request);

    /**
     * 权限组删除设备
     * @author shd
     * @date 2021/7/13 16:56
     * @param request
     * @return com.ruoyi.common.core.domain.AjaxResult
     */
    AjaxResult permissionDelDevices(DeviceCommandDelDevicesRequest request);

    /**
     * 海康设备添加注册
     *
     * @param
     * @return com.ruoyi.common.core.domain.AjaxResult
     * @author shd
     * @date 2021/7/13 16:25
     */
    void registerHkDeviceAndBindGroups(AccessDevice accessDevice, Boolean isDeviceNeedRegist);

    /**
     * 设备列表新增设备，多选权限组，下发
     * @param device
     * @param groups
     * @return
     */
    AjaxResult addDeviceGroups(AccessDevice device,List<Long> groups,Boolean isDeviceNeedRegist);

    /**
     * 删除单设备，多权限组，下发
     *
     * @param
     * @return com.ruoyi.common.core.domain.AjaxResult
     * @author shd
     * @date 2021/7/13 16:56
     */
    AjaxResult delDeviceGroups(AccessDevice device,List<Long> groups);

    /**
     * 查询用户是否有绑定指定类型的设备,返回设备集合
     *
     * @param user
     * @param type hq hk
     * @return
     */
    List<AccessDevice> selectUserDeviceByType(User user, String type);
    /**
     * 人员下发：hk{支持新增修改人员基础信息，并按权限组下发}，hq{按照权限组的设备下发}
     * @param user
     * @param type
     * @param personUpdateNeedSyncHk
     * @return
     */
    public AjaxResult addUpdatePersionCommand(User user, String type, Boolean personUpdateNeedSyncHk);

    /**
     * 新增修改hk基础人员信息
     * @param user
     * @return
     */
    public AjaxResult addUpdateHkPersonBaseInfo(User user,String type,Boolean personUpdateNeedSyncHk);

    /**
     * 人员列表点击下发
     * @param user
     * @return
     */
    public AjaxResult personCardCommand(User user);

    /**
     * 卡片列表点击下发
     * @param user
     * @return
     */
    public AjaxResult personCardCommand(User user, DCard dcard, String commandType);

    /**
     * 添加权限组到hk
     * @author shd
     * @date 2021/7/17 11:00
     * @param groupId
     * @return com.ruoyi.common.core.domain.AjaxResult
     */
    PermissionGroupResponse addGroup(Long groupId);

    /**
     * 门禁远程开门-海清
     * @param accessDevice
     * @return
     */
    AjaxResult openDoor(AccessDevice accessDevice, Long operator);

    /**
     * @param request
     * @description: 人员删除并且下发到设备
     * @author taojc
     * @date: 2022/8/17
     */
     void delUserDeviceInfos(DeviceCommandDeleteRequest request);
}
